/**
 * 
 */
package tp1.model;

import java.util.ArrayList;
import java.util.List;

import org.uqbar.commons.model.ObservableObject;
import org.uqbar.commons.model.UserException;

/**
 * @author david
 *
 */
public class NewGame extends ObservableObject {
	public static final String TAMANIO_TABLERO = "tamanioTablero";
	public static final String PERSONAJES_DISPONIBLES = "personajesDisponibles";
	public static final String PERSONAJE_DISPONIBLE_SELECCIONADO = "personajeDisponibleSeleccionado";
	public static final String PERSONAJES_PARTICIPANTES = "personajesParticipantes";
	public static final String PERSONAJE_PARTICIPANTE_SELECCIONADO = "personajeParticipanteSeleccionado";
	public static final String AGREGAR = "agregar";
	public static final String QUITAR = "quitar";
	
	private int tamanioTablero;
	private List<Personaje> personajesDisponibles;
	private Personaje personajeDisponibleSeleccionado;
	private List<Personaje> personajesParticipantes;
	private Personaje personajeParticipanteSeleccionado;
	
	public NewGame() {
		this.setPersonajesDisponibles(new ArrayList<Personaje>());
		this.setPersonajesParticipantes(new ArrayList<Personaje>());
		
		this.getPersonajesDisponibles().add(new Personaje("Goku", 5));
		this.getPersonajesDisponibles().add(new Personaje("Gohan", 4));
		this.getPersonajesDisponibles().add(new Personaje("Krilin", 3));
		this.getPersonajesDisponibles().add(new Personaje("Bulma", 3));
		this.getPersonajesDisponibles().add(new Personaje("Cell", 5));
		this.getPersonajesDisponibles().add(new Personaje("Freezer", 4));
		this.getPersonajesDisponibles().add(new Personaje("Picolo", 4));
	}
	
	public void agregar() {
		if (this.getPersonajeDisponibleSeleccionado() != null) {
			this.getPersonajesDisponibles().remove(this.personajeDisponibleSeleccionado);
			this.firePropertyChange(NewGame.PERSONAJES_DISPONIBLES, null, this.getPersonajesDisponibles());
			this.getPersonajesParticipantes().add(this.personajeDisponibleSeleccionado);
			this.firePropertyChange(NewGame.PERSONAJES_PARTICIPANTES, null,	this.getPersonajesParticipantes());
			this.setPersonajeDisponibleSeleccionado(null);
		} else {
			throw new UserException("Debe seleccionar un personaje disponible para agregar");
		}
	}
	
	public void quitar() {
		if (this.getPersonajeParticipanteSeleccionado() != null) {
			this.getPersonajesParticipantes().remove(this.personajeParticipanteSeleccionado);
			this.firePropertyChange(NewGame.PERSONAJES_PARTICIPANTES, null, this.getPersonajesDisponibles());
			this.getPersonajesDisponibles().add(this.personajeParticipanteSeleccionado);
			this.firePropertyChange(NewGame.PERSONAJES_DISPONIBLES, null, this.getPersonajesParticipantes());
			this.setPersonajeParticipanteSeleccionado(null);
		} else {
			throw new UserException("Debe seleccionar un personaje participante para quitar");
		}
	}
	
	public int getTamanioTablero() {
		return this.tamanioTablero;
	}

	public void setTamanioTablero(int tamanioTablero) {
			this.setProperty(NewGame.TAMANIO_TABLERO, tamanioTablero);
	}
	
	public void setPersonajesDisponibles(List<Personaje> personajesDisponibles) {
		this.setProperty(NewGame.PERSONAJES_DISPONIBLES, personajesDisponibles);
	}

	public List<Personaje> getPersonajesDisponibles() {
		return this.personajesDisponibles;
	}

	public Personaje getPersonajeDisponibleSeleccionado() {
		return this.personajeDisponibleSeleccionado;
	}

	public void setPersonajeDisponibleSeleccionado(Personaje personajeDisponibleSeleccionado) {
		this.setProperty(NewGame.PERSONAJE_DISPONIBLE_SELECCIONADO, personajeDisponibleSeleccionado);
	}

	public List<Personaje> getPersonajesParticipantes() {
		return this.personajesParticipantes;
	}

	public void setPersonajesParticipantes(List<Personaje> personajesParticipante) {
		this.setProperty(NewGame.PERSONAJES_PARTICIPANTES, personajesParticipante);
	}

	public Personaje getPersonajeParticipanteSeleccionado() {
		return this.personajeParticipanteSeleccionado;
	}

	public void setPersonajeParticipanteSeleccionado(Personaje personajeParticipanteSeleccionado) {
		this.setProperty(NewGame.PERSONAJE_PARTICIPANTE_SELECCIONADO, personajeParticipanteSeleccionado);
	}

}
